package study.java.jdk.jdk8._1_stream.collectors.grouping_by;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import study.java.jdk.jdk8.DataUtils;
import study.java.jdk.jdk8.User;

import java.util.*;
import java.util.stream.Collectors;

/**
 *
 */
@Slf4j
public class _3_groupingBy_Test {

    List<String> src = Arrays.asList("123", "456", "789", "1101", "123");

    private List<User> userLt = DataUtils.buildUserLt();

    /**
     * ==============================
     * （1）分组
     * （2）指定分组容器 Map 类型
     * （3）对分组 List 进行收集
     * ==============================
     *
     * @param classifier Function（分类器）
     * @param mapFactory Supplier（Map 构造器，在需要返回特定的 Map 时使用（默认 HashMap））
     * @param downstream Collector（下个收集器）
     */
    @Test
    public void test() {
        Map<Integer, Set<String>> dest = src.stream()
                .collect(Collectors.groupingBy(String::length,
                        LinkedHashMap::new,
                        Collectors.toSet()));
        log.info("{}", dest);
    }

    @Test
    public void test1() {
        Map<Integer, Long> dest = src.stream()
                .collect(Collectors.groupingBy(String::length,
                        Collectors.counting()));
        log.info("{}", dest);
    }
}
